#ifndef __EC11_H__
#define __EC11_H__


#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdbool.h>
#include <pigpio.h>
#include <pthread.h>
#include "utils.h"


#define TRIM_A 4  // EC11 A
#define TRIM_B 17  // EC11 B
#define BUTTON_PIN 27  // 按键连接的 GPIO 引脚
#define CLICK_DELAY 200    // 单位：毫秒，两次点击的最大间隔，用于判断双击
#define LONG_PRESS_DELAY 1 // 长按时间阈值, 单位秒

typedef void (*Pi_Renc_CB_t)(int);

typedef enum {
    IDLE,
    PRESSED,
    RELEASED,
    UP,
    DOWN,
    LEFT,
    RIGHT,
    CLICKED,
    DOUBLE_CLICKED,
    LONG_PRESSED
} ButtonState;


typedef struct _Pi_Renc_s {
    int gpioA;
    int gpioB;
    int gpioBtn;
    Pi_Renc_CB_t callback;
    int levA;
    int levB;
    int lastGpio;
    int btnLastLevel;

    double btnPressedTime;   // 按钮按下时间
    int clickCount;          // 点击计数器
    double lastClickTime;    // 上次点击时间
    double longPressStartTime; // 长按开始时间

    int status;              // 当前事件状态
} Pi_Renc_t;

Pi_Renc_t * Pi_Renc(int gpioA, int gpioB, Pi_Renc_CB_t callback);
void Pi_Renc_cancel(Pi_Renc_t *renc);

int EC11_Init(void);
ButtonState Get_EC11_State(void);
void Reset_EC11_State(void);
void Deinit_EC11(void);

#ifdef __cplusplus
}
#endif

#endif 